Docker 컨ν μ΄λλ₯Ό μ¬μ©νμ¬ κ²¬κ³ νκ³ μΌκ΄λ JavaScript κ°λ° νκ²½μ μ€μ νλ λ°©λ²μ μμ보μΈμ. μ΄ κ°μ΄λλ κΈ°λ³Έ μ€μ λΆν° κ³ κΈ κ΅¬μ±κΉμ§ λͺ¨λ κ²μ λ€λ£Ήλλ€.
JavaScript κ°λ° νκ²½: Docker 컨ν μ΄λ μ€μ
λΉ λ₯΄κ² λ³ννλ μννΈμ¨μ΄ κ°λ° νκ²½μμ μΌκ΄λκ³ μ¬ν κ°λ₯ν κ°λ° νκ²½μ μ μ§νλ κ²μ λ§€μ° μ€μν©λλ€. μλ‘ λ€λ₯Έ μ΄μ 체μ , λ€μν μννΈμ¨μ΄ λ²μ , μΆ©λνλ μ’ μμ±μ "λ΄ μ»΄ν¨ν°μμλ λλλ°..."λΌλ μ λͺ λμ μ¦νκ΅°μ μ λ°ν μ μμ΅λλ€. μ λμ μΈ μ»¨ν μ΄λν νλ«νΌμΈ Dockerλ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ°λ ₯ν μ루μ μ μ 곡νλ©°, κ°λ°μκ° μ ν리μΌμ΄μ κ³Ό κ·Έ μ’ μμ±μ νλμ 격리λ λ¨μλ‘ ν¨ν€μ§ν μ μλλ‘ ν©λλ€.
μ΄ κ°μ΄λμμλ Docker 컨ν μ΄λλ₯Ό μ¬μ©νμ¬ κ²¬κ³ νκ³ μΌκ΄λ JavaScript κ°λ° νκ²½μ μ€μ νλ κ³Όμ μ μλ΄ν©λλ€. κΈ°λ³Έ μ€μ λΆν° κ³ κΈ κ΅¬μ±κΉμ§ λͺ¨λ κ²μ λ€λ£¨μ΄ νμ λ€μν μ΄μ 체μ μ κ΄κ³μμ΄ JavaScript νλ‘μ νΈμ λν μννκ³ ν¨μ¨μ μΈ μν¬νλ‘μ°λ₯Ό 보μ₯ν©λλ€.
JavaScript κ°λ°μ Dockerλ₯Ό μ¬μ©νλ μ΄μ λ 무μμΈκ°μ?
ꡬ체μ μΈ λ΄μ©μ λ€μ΄κ°κΈ° μ μ JavaScript κ°λ° νκ²½μ Dockerλ₯Ό μ¬μ©νλ μ΄μ μ μ΄ν΄λ³΄κ² μ΅λλ€.
- μΌκ΄μ±: Dockerλ νμ λͺ¨λκ° μ νν λμΌν νκ²½μμ μμ νλλ‘ νμ¬ νΈνμ± λ¬Έμ λ₯Ό μ κ±°νκ³ νκ²½ μ°¨μ΄λ‘ μΈν λ²κ·Έ λ°μ κ°λ₯μ±μ μ€μ λλ€. μ΄λ μ§λ¦¬μ μΌλ‘ λΆμ°λ νμκ² νΉν μ€μν©λλ€.
- 격리: 컨ν μ΄λλ νΈμ€νΈ μμ€ν κ³Ό 격리λμ΄ λ€λ₯Έ νλ‘μ νΈμμ μΆ©λμ λ°©μ§νκ³ μ’ μμ±μ΄ μλ‘ κ°μνμ§ μλλ‘ ν©λλ€.
- μ¬νμ±: Docker μ΄λ―Έμ§λ μ½κ² 곡μ νκ³ λ°°ν¬ν μ μμΌλ―λ‘ λ€λ₯Έ μ»΄ν¨ν°λ νλ‘λμ νκ²½μμ κ°λ° νκ²½μ μ½κ² μ¬νν μ μμ΅λλ€. μ΄λ μλ‘μ΄ νμμ μ¨λ³΄λ©νκ±°λ λ€λ₯Έ ν΄λΌμ°λ μ 곡μ 체μ λ°°ν¬ν λ νΉν μ μ©ν©λλ€.
- μ΄μμ±: Docker 컨ν μ΄λλ Windows, macOS, Linuxλ₯Ό ν¬ν¨νμ¬ Dockerλ₯Ό μ§μνλ λͺ¨λ νλ«νΌμμ μ€νλ μ μμΌλ―λ‘ κ°λ°μλ νλ‘μ νΈμ μν₯μ μ£Όμ§ μκ³ μμ μ΄ μ νΈνλ μ΄μ 체μ λ₯Ό μ¬μ©ν μ μμ΅λλ€.
- κ°μνλ λ°°ν¬: κ°λ°μ μ¬μ©λ λμΌν Docker μ΄λ―Έμ§λ₯Ό ν μ€νΈ λ° νλ‘λμ μλ μ¬μ©ν μ μμΌλ―λ‘ λ°°ν¬ νλ‘μΈμ€κ° κ°μνλκ³ μ€λ₯ μνμ΄ μ€μ΄λλλ€.
μ μ 쑰건
μμνκΈ° μ μ λ€μμ΄ μ€μΉλμ΄ μλμ§ νμΈνμΈμ.
- Docker: 곡μ Docker μΉμ¬μ΄νΈ(docker.com)μμ μ΄μ 체μ μ λ§λ Docker Desktopμ λ€μ΄λ‘λνμ¬ μ€μΉνμΈμ. Docker Desktopμλ Docker Engine, Docker CLI, Docker Compose λ° κΈ°ν νμ λκ΅¬κ° ν¬ν¨λμ΄ μμ΅λλ€.
- Node.js λ° npm (μ ν μ¬ν): 컨ν μ΄λ λ΄λΆμ μ€μΉλλ―λ‘ νΈμ€νΈ λ¨Έμ μ λ°λμ νμν κ²μ μλμ§λ§, λ‘컬μ Node.jsμ npmμ μ€μΉνλ©΄ 컨ν μ΄λ μΈλΆ μμ μ΄λ μ΄κΈ° νλ‘μ νΈ κ΅¬μ‘° μ€μ μ λμμ΄ λ μ μμ΅λλ€. nodejs.orgμμ λ€μ΄λ‘λν μ μμ΅λλ€.
- μ½λ νΈμ§κΈ°: μ νΈνλ μ½λ νΈμ§κΈ°λ₯Ό μ ννμΈμ(μ: VS Code, Sublime Text, Atom). VS Codeμλ μν¬νλ‘μ°λ₯Ό κ°μνν μ μλ νλ₯ν Docker νμ₯ κΈ°λ₯μ΄ μμ΅λλ€.
κΈ°λ³Έ Dockerfile μ€μ
λͺ¨λ Docker κΈ°λ° νκ²½μ κΈ°μ΄λ Dockerfileμ
λλ€. μ΄ νμΌμλ Docker μ΄λ―Έμ§λ₯Ό λΉλνκΈ° μν μ§μΉ¨μ΄ ν¬ν¨λμ΄ μμ΅λλ€. Node.js μ ν리μΌμ΄μ
μ μν κΈ°λ³Έ Dockerfileμ λ§λ€μ΄ λ³΄κ² μ΅λλ€.
# 곡μ Node.js λ°νμμ μμ μ΄λ―Έμ§λ‘ μ¬μ©
FROM node:18-alpine
# 컨ν
μ΄λ λ΄ μμ
λλ ν°λ¦¬ μ€μ
WORKDIR /app
# package.json λ° package-lock.jsonμ μμ
λλ ν°λ¦¬λ‘ 볡μ¬
COPY package*.json ./
# μ ν리μΌμ΄μ
μ’
μμ± μ€μΉ
RUN npm install
# μ ν리μΌμ΄μ
μμ€ μ½λλ₯Ό μμ
λλ ν°λ¦¬λ‘ 볡μ¬
COPY . .
# ν¬νΈ 3000μ μΈλΆ μΈκ³μ λ
ΈμΆ (μ±μ΄ λ€λ₯Έ ν¬νΈλ₯Ό μ¬μ©νλ κ²½μ° μ‘°μ )
EXPOSE 3000
# 컨ν
μ΄λ μμ μ μ€νν λͺ
λ Ή μ μ
CMD ["npm", "start"]
κ° μ€μ λΆμν΄ λ³΄κ² μ΅λλ€.
FROM node:18-alpine: 컨ν μ΄λμ κΈ°λ³Έ μ΄λ―Έμ§λ₯Ό μ§μ ν©λλ€. μ¬κΈ°μλ 곡μ Node.js 18 Alpine μ΄λ―Έμ§λ₯Ό μ¬μ©ν©λλ€. μ΄λ κ²½λ Linux λ°°ν¬νμ λλ€. Alpineμ ν¬κΈ°κ° μμ Docker μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μκ² μ μ§νλ λ° λμμ΄ λ©λλ€. νλ‘μ νΈμ μ ν©ν λ€λ₯Έ Node.js λ²μ μ κ³ λ €νμΈμ.WORKDIR /app: 컨ν μ΄λ λ΄λΆμ μμ λλ ν°λ¦¬λ₯Ό/appμΌλ‘ μ€μ ν©λλ€. μ ν리μΌμ΄μ μ½λκ° μ¬κΈ°μ μμΉνκ² λ©λλ€.COPY package*.json ./:package.jsonλ°package-lock.json(Yarnμ μ¬μ©νλ κ²½μ°yarn.lock) νμΌμ μμ λλ ν°λ¦¬λ‘ 볡μ¬ν©λλ€. μ΄ νμΌλ€μ λ¨Όμ 볡μ¬νλ©΄ Dockerκ°npm installλ¨κ³λ₯Ό μΊμν μ μμ΄ μ ν리μΌμ΄μ μ½λλ§ λ³κ²½λ λ λΉλ μκ°μ ν¬κ² λ¨μΆν μ μμ΅λλ€.RUN npm install:package.jsonμ μ μλ μ ν리μΌμ΄μ μ’ μμ±μ μ€μΉν©λλ€.COPY . .: λ‘컬 νλ‘μ νΈ λλ ν°λ¦¬μ λλ¨Έμ§ λͺ¨λ νμΌκ³Ό λλ ν°λ¦¬λ₯Ό 컨ν μ΄λ λ΄λΆμ μμ λλ ν°λ¦¬λ‘ 볡μ¬ν©λλ€.EXPOSE 3000: ν¬νΈ 3000μ λ ΈμΆνμ¬ νΈμ€νΈ λ¨Έμ μμ μ κ·Όν μ μλλ‘ ν©λλ€. μ ν리μΌμ΄μ μ΄ μ΄ ν¬νΈμμ μμ λκΈ°νλ κ²½μ° μ€μν©λλ€. μ ν리μΌμ΄μ μ΄ λ€λ₯Έ ν¬νΈλ₯Ό μ¬μ©νλ κ²½μ° ν¬νΈ λ²νΈλ₯Ό μ‘°μ νμΈμ.CMD ["npm", "start"]: 컨ν μ΄λκ° μμλ λ μ€νν λͺ λ Ήμ μ§μ ν©λλ€. μ¬κΈ°μλ Node.js μ ν리μΌμ΄μ μ μμνλ μΌλ°μ μΈ λͺ λ ΉμΈnpm startλ₯Ό μ¬μ©ν©λλ€. μ΄ λͺ λ Ήμ΄package.jsonμscriptsμΉμ μ μ μλ λͺ λ Ήκ³Ό μΌμΉνλμ§ νμΈνμΈμ.
Docker μ΄λ―Έμ§ λΉλ
Dockerfileμ μμ±ν νμλ λ€μ λͺ
λ Ήμ μ¬μ©νμ¬ Docker μ΄λ―Έμ§λ₯Ό λΉλν μ μμ΅λλ€.
docker build -t my-node-app .
μ¬κΈ°μ:
docker build: μ΄λ―Έμ§ λΉλλ₯Ό μν Docker λͺ λ Ήμ λλ€.-t my-node-app: μ΄λ―Έμ§μ νκ·Έ(μ΄λ¦)λ₯Ό μ§μ ν©λλ€. μ ν리μΌμ΄μ μ μ€λͺ μ μΈ μ΄λ¦μ μ ννμΈμ..: λΉλ 컨ν μ€νΈ, μ¦ νμ¬ λλ ν°λ¦¬λ₯Ό μ§μ ν©λλ€. Dockerλ μ΄ λλ ν°λ¦¬μDockerfileμ μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό λΉλν©λλ€.
κ·Έλ° λ€μ Dockerλ Dockerfileμ μ§μΉ¨μ μ€ννμ¬ μ΄λ―Έμ§λ₯Ό κ³μΈ΅λ³λ‘ λΉλν©λλ€. μ΄λ―Έμ§λ₯Ό μ²μ λΉλν λλ κΈ°λ³Έ μ΄λ―Έμ§λ₯Ό λ€μ΄λ‘λνκ³ μ’ μμ±μ μ€μΉνλ λ° μκ°μ΄ λ€μ 걸릴 μ μμ΅λλ€. κ·Έλ¬λ Dockerκ° μ€κ° κ³μΈ΅μ μΊμνλ―λ‘ νμ λΉλλ ν¨μ¬ λΉ λ¦ λλ€.
Docker 컨ν μ΄λ μ€ν
μ΄λ―Έμ§κ° λΉλλ νμλ λ€μ λͺ λ Ήμ μ¬μ©νμ¬ ν΄λΉ μ΄λ―Έμ§μμ 컨ν μ΄λλ₯Ό μ€νν μ μμ΅λλ€.
docker run -p 3000:3000 my-node-app
μ¬κΈ°μ:
docker run: 컨ν μ΄λ μ€νμ μν Docker λͺ λ Ήμ λλ€.-p 3000:3000: νΈμ€νΈ λ¨Έμ μ ν¬νΈ 3000μ 컨ν μ΄λ λ΄λΆμ ν¬νΈ 3000μ λ§€νν©λλ€. μ΄λ₯Ό ν΅ν΄ λΈλΌμ°μ μμlocalhost:3000μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ μ κ·Όν μ μμ΅λλ€. 첫 λ²μ§Έ μ«μλ νΈμ€νΈ ν¬νΈμ΄κ³ λ λ²μ§Έ μ«μλ 컨ν μ΄λ ν¬νΈμ λλ€.my-node-app: μ€ννλ €λ μ΄λ―Έμ§μ μ΄λ¦μ λλ€.
μ΄μ μ ν리μΌμ΄μ
μ΄ Docker 컨ν
μ΄λ λ΄μμ μ€νλ©λλ€. λΈλΌμ°μ λ₯Ό μ΄κ³ localhost:3000(λλ μ§μ ν ν¬νΈ)μΌλ‘ μ΄λνμ¬ μ κ·Όν μ μμ΅λλ€. μ ν리μΌμ΄μ
μ νμ νλ©΄μ΄λ μ΄κΈ° UIκ° νμλμ΄μΌ ν©λλ€.
Docker Compose μ¬μ©
μ¬λ¬ μλΉμ€κ° μλ λ 볡μ‘ν μ ν리μΌμ΄μ
μ κ²½μ° Docker Composeλ λ§€μ° μ μ©ν λꡬμ
λλ€. YAML νμΌμ μ¬μ©νμ¬ λ€μ€ 컨ν
μ΄λ μ ν리μΌμ΄μ
μ μ μνκ³ κ΄λ¦¬ν μ μμ΅λλ€. Node.js μ ν리μΌμ΄μ
μ μν docker-compose.yml νμΌμ λ§λ€μ΄ λ³΄κ² μ΅λλ€.
version: "3.9"
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
environment:
NODE_ENV: development
command: npm run dev
κ° μΉμ μ μ΄ν΄λ³΄κ² μ΅λλ€.
version: "3.9": Docker Compose νμΌ νμμ λ²μ μ μ§μ ν©λλ€.services: μ ν리μΌμ΄μ μ ꡬμ±νλ μλΉμ€λ₯Ό μ μν©λλ€. μ¬κΈ°μλappμ΄λΌλ λ¨μΌ μλΉμ€κ° μμ΅λλ€.build: .: μ΄λ―Έμ§κ° νμ¬ λλ ν°λ¦¬μDockerfileμμ λΉλλμ΄μΌ ν¨μ μ§μ ν©λλ€.ports: - "3000:3000":docker runλͺ λ Ήκ³Ό μ μ¬νκ² νΈμ€νΈ λ¨Έμ μ ν¬νΈ 3000μ 컨ν μ΄λ λ΄λΆμ ν¬νΈ 3000μ λ§€νν©λλ€.volumes: - .:/app: νΈμ€νΈ λ¨Έμ μ νμ¬ λλ ν°λ¦¬λ₯Ό 컨ν μ΄λ λ΄λΆμ/appλλ ν°λ¦¬μ λ§μ΄νΈνλ λ³Όλ₯¨μ μμ±ν©λλ€. μ΄λ₯Ό ν΅ν΄ νΈμ€νΈ λ¨Έμ μμ μ½λλ₯Ό λ³κ²½νκ³ ν΄λΉ λ³κ²½ μ¬νμ΄ μ»¨ν μ΄λ λ΄λΆμμ μ¦μ λ°μλλλ‘ νμ¬ ν« λ¦¬λ‘λ©μ νμ±νν μ μμ΅λλ€.environment: NODE_ENV: development: 컨ν μ΄λ λ΄λΆμNODE_ENVνκ²½ λ³μλ₯Όdevelopmentλ‘ μ€μ ν©λλ€. μ΄λ μ ν리μΌμ΄μ μ κ°λ° λͺ¨λλ‘ μ€ννλλ‘ κ΅¬μ±νλ λ° μ μ©ν©λλ€.command: npm run dev: Dockerfileμ μ μλ κΈ°λ³Έ λͺ λ Ήμ μ¬μ μν©λλ€. μ¬κΈ°μλ ν« λ¦¬λ‘λ©μ μ¬μ©νμ¬ κ°λ° μλ²λ₯Ό μμνλ λ° μμ£Ό μ¬μ©λλnpm run devλ₯Ό μ¬μ©ν©λλ€.
Docker Composeλ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ
μ μμνλ €λ©΄ docker-compose.yml νμΌμ΄ μλ λλ ν°λ¦¬λ‘ μ΄λνμ¬ λ€μ λͺ
λ Ήμ μ€ννμΈμ.
docker-compose up
Docker Composeλ νμν κ²½μ° μ΄λ―Έμ§λ₯Ό λΉλνκ³ μ»¨ν
μ΄λλ₯Ό μμν©λλ€. -d νλκ·Έλ₯Ό μΆκ°νμ¬ μ»¨ν
μ΄λλ₯Ό λΆλ¦¬ λͺ¨λ(λ°±κ·ΈλΌμ΄λ)λ‘ μ€νν μ μμ΅λλ€.
κ³ κΈ μ€μ μ΅μ
Dockerνλ JavaScript κ°λ° νκ²½μ ν₯μμν€κΈ° μν λͺ κ°μ§ κ³ κΈ μ€μ μ΅μ μ λ€μκ³Ό κ°μ΅λλ€.
1. λ€λ¨κ³ λΉλ
λ€λ¨κ³ λΉλλ₯Ό μ¬μ©νλ©΄ Dockerfileμ μ¬λ¬ FROM μ§μΉ¨μ μ¬μ©ν μ μμΌλ©°, κ° μ§μΉ¨μ λ€λ₯Έ λΉλ λ¨κ³λ₯Ό λνλ
λλ€. μ΄λ λΉλ νκ²½κ³Ό λ°νμ νκ²½μ λΆλ¦¬νμ¬ μ΅μ’
μ΄λ―Έμ§μ ν¬κΈ°λ₯Ό μ€μ΄λ λ° μ μ©ν©λλ€.
# 1λ¨κ³: μ ν리μΌμ΄μ
λΉλ
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 2λ¨κ³: λ°νμ μ΄λ―Έμ§ μμ±
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
μ΄ μμμλ 첫 λ²μ§Έ λ¨κ³(builder)μμ Node.jsλ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ
μ λΉλν©λλ€. λ λ²μ§Έ λ¨κ³μμλ Nginxλ₯Ό μ¬μ©νμ¬ λΉλλ μ ν리μΌμ΄μ
νμΌμ μ 곡ν©λλ€. 첫 λ²μ§Έ λ¨κ³μμ λΉλλ νμΌλ§ λ λ²μ§Έ λ¨κ³λ‘ 볡μ¬λμ΄ λ μκ³ ν¨μ¨μ μΈ μ΄λ―Έμ§κ° μμ±λ©λλ€.
2. νκ²½ λ³μ μ¬μ©
νκ²½ λ³μλ μ½λλ₯Ό μμ νμ§ μκ³ μ ν리μΌμ΄μ
μ ꡬμ±νλ κ°λ ₯ν λ°©λ²μ
λλ€. docker-compose.yml νμΌμ νκ²½ λ³μλ₯Ό μ μνκ±°λ -e νλκ·Έλ₯Ό μ¬μ©νμ¬ λ°νμμ μ λ¬ν μ μμ΅λλ€.
services:
app:
environment:
API_URL: "http://api.example.com"
μ ν리μΌμ΄μ
λ΄λΆμμλ process.envλ₯Ό μ¬μ©νμ¬ μ΄λ¬ν νκ²½ λ³μμ μ κ·Όν μ μμ΅λλ€.
const apiUrl = process.env.API_URL;
3. κ°λ°μ μν λ³Όλ₯¨ λ§μ΄ν
λ³Όλ₯¨ λ§μ΄ν (Docker Compose μμμ λμ μμ)μ κ°λ°μμ λ§€μ° μ€μν©λλ€. νΈμ€νΈ λ¨Έμ μμ μ½λ λ³κ²½ μ¬νμ΄ μ»¨ν μ΄λ λ΄λΆμμ μ¦μ λ°μλλλ‘ νκΈ° λλ¬Έμ λλ€. μ΄λ₯Ό ν΅ν΄ λ³κ²½ν λλ§λ€ μ΄λ―Έμ§λ₯Ό λ€μ λΉλν νμκ° μμ΅λλ€.
4. VS Codeλ₯Ό μ¬μ©ν λλ²κΉ
VS Codeλ Docker 컨ν μ΄λ λ΄μμ μ€νλλ Node.js μ ν리μΌμ΄μ μ λλ²κΉ νλ λ° νμν μ§μμ μ 곡ν©λλ€. VS Code Docker νμ₯ νλ‘κ·Έλ¨μ μ¬μ©νμ¬ μ€ν μ€μΈ 컨ν μ΄λμ μ°κ²°νκ³ μ€λ¨μ μ μ€μ νκ³ λ³μλ₯Ό κ²μ¬νλ©° μ½λλ₯Ό λ¨κ³λ³λ‘ μ€νν μ μμ΅λλ€.
λ¨Όμ VS Codeμ Docker νμ₯μ μ€μΉνμΈμ. κ·Έλ° λ€μ .vscode λλ ν°λ¦¬μ λ€μ ꡬμ±μΌλ‘ launch.json νμΌμ λ§λλλ€.
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to Docker",
"port": 9229,
"address": "localhost",
"remoteRoot": "/app",
"localRoot": "${workspaceFolder}"
}
]
}
Node.js μ ν리μΌμ΄μ
μ΄ --inspect λλ --inspect-brk νλκ·Έλ‘ μμλμλμ§ νμΈνμΈμ. μλ₯Ό λ€μ΄ docker-compose.yml νμΌμ μμ νμ¬ μ΄ νλκ·Έλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
services:
app:
command: npm run dev -- --inspect=0.0.0.0:9229
κ·Έλ° λ€μ VS Codeμμ "Attach to Docker" ꡬμ±μ μ ννκ³ λλ²κΉ μ μμν©λλ€. 컨ν μ΄λ λ΄μμ μ€νλλ μ½λλ₯Ό μ€λ¨νκ³ λλ²κ·Έν μ μμ΅λλ€.
5. λΉκ³΅κ° npm λ μ§μ€νΈλ¦¬ μ¬μ©
λΉκ³΅κ° npm ν¨ν€μ§κ° μλ νλ‘μ νΈμμ μμ
νλ κ²½μ° Docker 컨ν
μ΄λκ° λΉκ³΅κ° npm λ μ§μ€νΈλ¦¬μ μΈμ¦νλλ‘ κ΅¬μ±ν΄μΌ ν©λλ€. μ΄λ docker-compose.yml νμΌμ NPM_TOKEN νκ²½ λ³μλ₯Ό μ€μ νκ±°λ νλ‘μ νΈ λλ ν°λ¦¬μ .npmrc νμΌμ λ§λ€κ³ 컨ν
μ΄λλ‘ λ³΅μ¬νμ¬ μνν μ μμ΅λλ€.
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
COPY .npmrc .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
`.npmrc` νμΌμλ μΈμ¦ ν ν°μ΄ ν¬ν¨λμ΄μΌ ν©λλ€.
//registry.npmjs.org/:_authToken=YOUR_NPM_TOKEN
YOUR_NPM_TOKENμ μ€μ npm ν ν°μΌλ‘ λ°κΎΈλ κ²μ μμ§ λ§μΈμ. μ΄ ν ν°μ μμ νκ² λ³΄κ΄νκ³ κ³΅κ° μ μ₯μμ 컀λ°νμ§ λ§μΈμ.
6. μ΄λ―Έμ§ ν¬κΈ° μ΅μ ν
Docker μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μκ² μ μ§νλ κ²μ λΉλ λ° λ°°ν¬ μκ°μ λ¨μΆνλ λ° μ€μν©λλ€. μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ΅μ ννκΈ° μν λͺ κ°μ§ νμ λ€μκ³Ό κ°μ΅λλ€.
node:alpineκ³Ό κ°μ΄ κ²½λ κΈ°λ³Έ μ΄λ―Έμ§λ₯Ό μ¬μ©νμΈμ.- λ€λ¨κ³ λΉλλ₯Ό μ¬μ©νμ¬ λΉλ νκ²½κ³Ό λ°νμ νκ²½μ λΆλ¦¬νμΈμ.
- μ΄λ―Έμ§μμ λΆνμν νμΌκ³Ό λλ ν°λ¦¬λ₯Ό μ κ±°νμΈμ.
- λΉλ 컨ν
μ€νΈμμ νμΌκ³Ό λλ ν°λ¦¬λ₯Ό μ μΈνλ €λ©΄
.dockerignoreνμΌμ μ¬μ©νμΈμ. - μ¬λ¬
RUNλͺ λ Ήμ λ¨μΌ λͺ λ ΉμΌλ‘ κ²°ν©νμ¬ κ³μΈ΅ μλ₯Ό μ€μ΄μΈμ.
μ: React μ ν리μΌμ΄μ Dockerν
Create React AppμΌλ‘ λ§λ React μ ν리μΌμ΄μ μ Dockerννλ μ€μ©μ μΈ μμ λ₯Ό ν΅ν΄ μ΄λ¬ν κ°λ μ μ€λͺ ν΄ λ³΄κ² μ΅λλ€.
λ¨Όμ Create React Appμ μ¬μ©νμ¬ μ React μ ν리μΌμ΄μ μ λ§λλλ€.
npx create-react-app my-react-app
cd my-react-app
κ·Έλ° λ€μ νλ‘μ νΈμ λ£¨νΈ λλ ν°λ¦¬μ Dockerfileμ λ§λλλ€.
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
docker-compose.yml νμΌμ λ§λλλ€.
version: "3.9"
services:
app:
build: .
ports:
- "3000:80"
volumes:
- .:/app
environment:
NODE_ENV: development
μ°Έκ³ : Nginxκ° ν¬νΈ 80μμ μ ν리μΌμ΄μ μ μ 곡νλ―λ‘ νΈμ€νΈμ ν¬νΈ 3000μ 컨ν μ΄λ λ΄λΆμ ν¬νΈ 80μ λ§€ννκ³ μμ΅λλ€. μ ν리μΌμ΄μ ꡬμ±μ λ°λΌ ν¬νΈ λ§€νμ μ‘°μ ν΄μΌ ν μ μμ΅λλ€.
λ§μ§λ§μΌλ‘ docker-compose upμ μ€ννμ¬ μ ν리μΌμ΄μ
μ λΉλνκ³ μμν©λλ€. κ·Έλ° λ€μ λΈλΌμ°μ μμ localhost:3000μΌλ‘ μ΄λνμ¬ μ ν리μΌμ΄μ
μ μ‘μΈμ€ν μ μμ΅λλ€.
μΌλ°μ μΈ λ¬Έμ λ° ν΄κ²° λ°©λ²
μ μ€νκ² κ΅¬μ±νλλΌλ Dockerλ₯Ό μ¬μ©ν λ λ¬Έμ κ° λ°μν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ λ¬Έμ μ ν΄κ²° λ°©λ²μ λλ€.
- ν¬νΈ μΆ©λ:
docker-compose.ymlλλdocker runλͺ λ Ήμμ λ§€ννλ ν¬νΈκ° νΈμ€νΈ λ¨Έμ μ λ€λ₯Έ μ ν리μΌμ΄μ μμ μ΄λ―Έ μ¬μ© μ€μ΄μ§ μμμ§ νμΈνμΈμ. - λ³Όλ₯¨ λ§μ΄ν λ¬Έμ : λ§μ΄νΈνλ νμΌ λ° λλ ν°λ¦¬μ κΆνμ νμΈνμΈμ. Dockerκ° νμΌμ μ‘μΈμ€ν μ μλ νμν κΆνμ΄ μμ μ μμ΅λλ€.
- μ΄λ―Έμ§ λΉλ μ€ν¨: μ€λ₯μ λν΄
docker buildλͺ λ Ήμ μΆλ ₯μ μ£Όμ κΉκ² κ²ν νμΈμ. μΌλ°μ μΈ μμΈμΌλ‘λ μλͺ»λDockerfileꡬ문, λλ½λ μ’ μμ± λλ λ€νΈμν¬ λ¬Έμ κ° μμ΅λλ€. - 컨ν
μ΄λ μΆ©λ:
docker logsλͺ λ Ήμ μ¬μ©νμ¬ μ»¨ν μ΄λμ λ‘κ·Έλ₯Ό λ³΄κ³ μΆ©λ μμΈμ νμ νμΈμ. μΌλ°μ μΈ μμΈμΌλ‘λ μ ν리μΌμ΄μ μ€λ₯, λλ½λ νκ²½ λ³μ λλ 리μμ€ μ μ½μ΄ μμ΅λλ€. - λλ¦° λΉλ μκ°: λ€λ¨κ³ λΉλ μ¬μ©, μ’
μμ± μΊμ±, κ³μΈ΅ μ μ΅μν λ±μ ν΅ν΄
Dockerfileμ μ΅μ ννμΈμ.
κ²°λ‘
Dockerλ μΌκ΄λκ³ μ¬ν κ°λ₯ν JavaScript κ°λ° νκ²½μ λ§λλ κ°λ ₯νκ³ λ€μ¬λ€λ₯ν μ루μ μ μ 곡ν©λλ€. Dockerλ₯Ό μ¬μ©νλ©΄ νΈνμ± λ¬Έμ λ₯Ό μ κ±°νκ³ , λ°°ν¬λ₯Ό κ°μννλ©°, νμ λͺ¨λκ° λμΌν νκ²½μμ μμ νλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
μ΄ κ°μ΄λμμλ Dockerνλ JavaScript κ°λ° νκ²½μ μ€μ νλ κΈ°λ³Έ μ¬νκ³Ό λͺ κ°μ§ κ³ κΈ μ€μ μ΅μ μ λ€λ£¨μμ΅λλ€. μ΄λ¬ν λ¨κ³λ₯Ό λ°λ₯΄λ©΄ 볡μ‘μ±μ΄λ ν κ·λͺ¨μ κ΄κ³μμ΄ JavaScript νλ‘μ νΈμ λν κ²¬κ³ νκ³ ν¨μ¨μ μΈ μν¬νλ‘μ°λ₯Ό λ§λ€ μ μμ΅λλ€. Dockerλ₯Ό μμ©νκ³ JavaScript κ°λ° νλ‘μΈμ€μ μ μ¬λ ₯μ μ΅λν λ°ννμΈμ.
λ€μ λ¨κ³:
- νΉμ μꡬμ λ§λ 미리 λΉλλ μ΄λ―Έμ§λ₯Ό μ°ΎμΌλ €λ©΄ Docker Hubλ₯Ό νμνμΈμ.
- λ€μ€ 컨ν μ΄λ μ ν리μΌμ΄μ κ΄λ¦¬λ₯Ό μν΄ Docker Composeμ λν΄ μμΈν μμ보μΈμ.
- νλ‘λμ νκ²½μμ Docker 컨ν μ΄λλ₯Ό μ€μΌμ€νΈλ μ΄μ νκΈ° μν΄ Docker Swarm λ° Kubernetesμ λν΄ μμ보μΈμ.
μ΄λ¬ν λͺ¨λ² μ¬λ‘λ₯Ό μν¬νλ‘μ°μ ν΅ν©νλ©΄ JavaScript μ ν리μΌμ΄μ μ λν λ³΄λ€ ν¨μ¨μ μ΄κ³ μμ μ μ΄λ©° νμ₯ κ°λ₯ν κ°λ° νκ²½μ λ§λ€μ΄ κ²½μμ΄ μΉμ΄ν μ€λλ μμ₯μμ μ±κ³΅μ 보μ₯ν μ μμ΅λλ€.